//package practice.tree;
//
//import datastructure.map.model.Key;
//import datastructure.map.model.SubKey1;
//import datastructure.map.model.SubKey2;
//import practice.tree.four.HashMap;
//import practice.tree.four.Map;
//import utils.Asserts;
//import utils.Times;
//import utils.file.FileInfo;
//import utils.file.Files;
//
//
///**
// * @Description: 测试ListSet和TreeSet的性能
// * @Author Ammar
// * @Create 2023/4/19 23:28
// */
//public class MapTest {
//    static void test1Map(Map<String, Integer> map, String[] words) {
//        Times.test(map.getClass().getName(), new Times.Task() {
//            @Override
//            public void execute() {
//                for (String word : words) {
//                    Integer count = map.get(word);
//                    count = count == null ? 0 : count;
//                    map.put(word, count + 1);
//                }
//                System.out.println(map.size()); // 759067
//
//                int count = 0;
//                for (String word : words) {
//                    Integer i = map.get(word);
//                    count += i == null ? 0 : i;
//                    map.remove(word);
//                }
//                Asserts.test(count == words.length);
//                Asserts.test(map.size() == 0);
//            }
//        });
//    }
//
//    static void test1() {
//        String filepath = "/Users/Ammar/Downloads/未命名文件夹";
//        FileInfo fileInfo = Files.read(filepath, null);
//        String[] words = fileInfo.words();
//
//        System.out.println("总行数：" + fileInfo.getLines());
//        System.out.println("单词总数：" + words.length);
//        System.out.println("-------------------------------------");
//
//        test1Map(new HashMap<>(), words);
//    }
//
//    static void test2(HashMap<Object, Integer> map) {
//        for (int i = 1; i <= 20; i++) {
//            map.put(new Key(i), i);
//        }
//        for (int i = 5; i <= 7; i++) {
//            map.put(new Key(i), i + 5);
//        }
//        Asserts.test(map.size() == 20);
//        Asserts.test(map.get(new Key(4)) == 4);
//        Asserts.test(map.get(new Key(5)) == 10);
//        Asserts.test(map.get(new Key(6)) == 11);
//        Asserts.test(map.get(new Key(7)) == 12);
//        Asserts.test(map.get(new Key(8)) == 8);
//    }
//
//    static void test3(HashMap<Object, Integer> map) {
//        map.put(null, 1); // 1
//        map.put(new Object(), 2); // 2
//        map.put("jack", 3); // 3
//        map.put(10, 4); // 4
//        map.put(new Object(), 5); // 5
//        map.put("jack", 6);
//        map.put(10, 7);
//        map.put(null, 8);
//        map.put(10, null);
//        Asserts.test(map.size() == 5);
//        Asserts.test(map.get(null) == 8);
//        Asserts.test(map.get("jack") == 6);
//        Asserts.test(map.get(10) == null);
//        Asserts.test(map.get(new Object()) == null);
//        Asserts.test(map.containsKey(10));
//        Asserts.test(map.containsKey(null));
//        Asserts.test(map.containsValue(null));
//        Asserts.test(map.containsValue(1) == false);
//    }
//
//    static void test4(HashMap<Object, Integer> map) {
//        map.put("jack", 1);
//        map.put("rose", 2);
//        map.put("jim", 3);
//        map.put("jake", 4);
//        map.remove("jack");
//        map.remove("jim");
//        for (int i = 1; i <= 10; i++) {
//            map.put("test" + i, i);
//            map.put(new Key(i), i);
//        }
//        for (int i = 5; i <= 7; i++) {
//            Asserts.test(map.remove(new Key(i)) == i);
//        }
//        for (int i = 1; i <= 3; i++) {
//            map.put(new Key(i), i + 5);
//        }
//        Asserts.test(map.size() == 19);
//        Asserts.test(map.get(new Key(1)) == 6);
//        Asserts.test(map.get(new Key(2)) == 7);
//        Asserts.test(map.get(new Key(3)) == 8);
//        Asserts.test(map.get(new Key(4)) == 4);
//        Asserts.test(map.get(new Key(5)) == null);
//        Asserts.test(map.get(new Key(6)) == null);
//        Asserts.test(map.get(new Key(7)) == null);
//        Asserts.test(map.get(new Key(8)) == 8);
//        map.traversal(new Map.Visitor<Object, Integer>() {
//            public boolean visit(Object key, Integer value) {
//                System.out.println(key + "_" + value);
//                return false;
//            }
//        });
//    }
//
//    static void test5(HashMap<Object, Integer> map) {
//        for (int i = 1; i <= 20; i++) {
//            map.put(new SubKey1(i), i);
//        }
//        System.out.println(map.get(new SubKey2(1)));
//        map.put(new SubKey2(1), 5);
//        System.out.println(map.get(new SubKey1(1)) == 5);
//        Asserts.test(map.get(new SubKey1(1)) == 5);
//        Asserts.test(map.get(new SubKey2(1)) == 5);
//        Asserts.test(map.size() == 20);
//    }
//
//    public static void main(String[] args) {
//		test1();
//		test2(new HashMap<>());
//		test3(new HashMap<>());
//		test4(new HashMap<>());
//		test5(new HashMap<>());
//    }
//}
